package com.yt.bigdata;

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

import java.util.concurrent.TimeUnit;

public class CacheExample {
    private static final Cache<Integer, Boolean> cache;

    static {
        cache = CacheBuilder.newBuilder()
                .expireAfterWrite(1, TimeUnit.DAYS) // 设置缓存项在写入后一天过期  
                .build();
    }

    public static void add(Integer key) {
        cache.put(key, true); // 缓存值可以是任意类型，这里我们使用 Boolean 类型的 true 作为占位符  
    }

    public static void remove(Integer key) {
        cache.invalidate(key); // 从缓存中移除指定的键及其对应的值  
    }

    public static void main(String[] args) {
        // 添加元素到缓存  
        add(1);
        add(2);
        add(3);

        // 验证元素是否存在（不是直接 remove，而是检查是否存在后执行其他逻辑）  
        if (cache.getIfPresent(1) != null) {
            System.out.println("Key 1 is present in the cache.");
            // 执行其他逻辑，例如处理或删除  
            remove(1);
        }

        // 等待足够长的时间以观察过期行为（这里用 sleep 来模拟，实际中不应在主线程中这样做）  
        try {
            TimeUnit.DAYS.sleep(1);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 验证元素是否已过期并从缓存中删除  
        if (cache.getIfPresent(2) == null) {
            System.out.println("Key 2 has expired from the cache.");
        } else {
            System.out.println("Key 2 is still in the cache.");
        }
    }
}